Przykad 4.3. Realizacja w C podziau ar[left,right] na podstawie zadanego elementu osiowego
/**
 * W czasie liniowym przegrupuj podtablic ar[left,right] wok
 * elementu osiowego pivot=ar[pivotIndex], zapamitujc element
 * osiowy na waciwej pozycji "store" podtablicy (zwracanej przez t
 * funkcj) i zapewniajc, e wszystkie elementy ar[left, store) <= pivot,
 * a wszystkie ar[store+1, right) > pivot
 */
int partition (void **ar, int(*cmp)(const void *, const void *),
               int left, int right, int pivotIndex) {
   int idx, store;
   void *pivot = ar[pivotIndex];

   /* Przenie element osiowy (pivot) na koniec tablicy */
   void *tmp = ar[right];
   ar[right] = ar[pivotIndex];
   ar[pivotIndex] = tmp;

   /* Wszystkie wartoci <= pivot s przenoszone na przd
    * tablicy, a element osiowy jest wstawiony tu za nimi */
   store = left;
   for (idx = left; idx < right; idx++) {
      if (cmp(ar[idx], pivot) <= 0) {
         tmp = ar[idx];
         ar[idx] = ar[store];
         ar[store] = tmp;
         store++;
      }
   }

   tmp = ar[right];
   ar[right] = ar[store];
   ar[store] = tmp;
   return store;
}
